import axios from 'axios'
import { clearToken, getRefreshToken, getToken, setToken } from '../utils/auth'
import { refreshToken } from '../api/users'
import {Message} from 'element-ui'

const instance = axios.create({
  baseURL: 'http://localhost:5000/',
  timeout: 5000,
})

instance.interceptors.request.use(
  (config) => {
    // console.log(config)
    let token = getToken()
    if (token) {
      config.headers['Authorization'] = 'Bearer ' + token
    }

    return config
  },
  (err) => {
    Message.error(err)
    return Promise.reject(err)
  },
)

instance.interceptors.response.use(
  (response) => {
    // console.log(response)
    if (response.status === 200) {
      return response.data
    }
    return response
  },
  (err) => {
    console.log(err)
    // 如果错误中有响应信息
    if (err.response) {
      // 响应信息中是401token未通过验证
      if (err.response.status === 401) {
        Message.info('你的登录已经失效，正在尝试重新刷新登录信息。。。')
        let params = {
          token: getToken(),
          refreshToken: getRefreshToken(),
        }
        // 尝试重新刷新token
        refreshToken(params)
          .then((res) => {
            Message.success('重新刷新登录信息成功！请刷新页面或者点击刷新按钮。。。')
            setToken(res.data.token,res.data.refreshToken)
          })
          .catch((err) => {
            Message.error(err)
          })
      }else{
        // 如果refreshToken也过期了，则全部清空，重新登录
        clearToken()
      }
    }
    return Promise.reject(err)
  },
)

export default instance
